/*
 * Universidad Del Valle de Guatemala
 * Nombre: Jonathan Robles
 * No carnet: 10267
 */
package hoja4;
import java.util.Scanner;
import java.util.InputMismatchException;
public class Hoja4 {

   
    public static void main(String[] args) {
       
       
        Scanner teclado = new Scanner (System.in);
       
        Lista<String> pilaS=new Lista<String>();
        Lista<Double> pilaD=new Lista<Double>();
        
        //variables utilizadas
        int opcion=4;
        double eleccion=0;
        double valor1=0;
        double valor2=0;
        double resultado=0;
        String operando=new String();
        
        //Pedir datos al usuario
        System.out.println("\n--------------BIENVENIDO AL PROGRAMA---------------\n");
        
        do
        {
            menu();
            //-----------------------------------------------------------------------------
            //programacion defensiva
            opcion=(int)obNumero("\nIngrese la opción que desea llevar a cabo, en notación posfix: \n",false);
            if (opcion<0)
                opcion=0;
            //-----------------------------------------------------------------------------
            
            switch(opcion)
            {
                case 1://ingreso del valor que coloco el usuario a la pila
                    //programacion defensiva
                    eleccion=(double)obNumero("Numero:: \n",false);
                    if (eleccion<0)
                        eleccion=0;
                    pilaD.add(eleccion);
                    break;
                    
                case 2://ingreso de operando para realizar las operaciones
                    /*
                    System.out.println("Operando: ");
                    pilaS.add(teclado.nextLine());
                     
                     */
                    break;
                    
                case 3://muestre el resultado de la notacion posfix
                        //obteniendo los primeros dos valores
                    /*
                        if (pilaD.notEmpty()) 
                            valor1=pilaD.remove();
                        if (pilaD.notEmpty())
                            valor2=pilaD.remove();  
                        if (pilaS.notEmpty())
                            operando=pilaS.remove();   
                        
                        //determinando los operando
                        if("+".equals(operando))
                        {
                            pilaD.add(valor2+valor1);
                            resultado = resultado + (valor2+valor1);
                        }
                        if("-".equals(operando))
                        {
                            pilaD.add(valor1-valor2); 
                            resultado = resultado + (valor1-valor2);
                        }
                        if("*".equals(operando))
                        {
                            pilaD.add(valor1*valor2);
                            resultado = resultado + (valor2*valor1);
                        }
                        if("/".equals(operando))
                        {
                            pilaD.add(valor1/valor2);
                            resultado = resultado + (valor1/valor2);
                        }
                               
                        
                    //ciclo para ir realizando las distintas operaciones    
                    while (pilaD.notEmpty()&&pilaS.notEmpty())
                    {
                        //obteniendo el resultado anterior y realizando una operacion nueva con otro valor
                        if (pilaD.notEmpty())
                            valor1=pilaD.removeLast();
                        if (pilaD.notEmpty())
                            valor2=pilaD.remove();   
                        if (pilaS.notEmpty())
                            operando=pilaS.remove();
                            
                        //determinando operando
                        if("+".equals(operando))
                        {
                            pilaD.add(valor2+valor1); 
                            resultado = resultado + (valor2+valor1);
                        }
                        if("-".equals(operando))
                        {
                            pilaD.add(valor2-valor1);
                            resultado = resultado + (valor1-valor2);
                        }
                        if("*".equals(operando))
                        {
                            pilaD.add(valor2*valor1);
                            resultado = resultado + (valor2*valor1);
                        }
                        if("/".equals(operando))
                        {
                            pilaD.add(valor2/valor1);  
                            resultado = resultado + (valor1/valor2);
                        }
                    }
                    //mostrando mensaje
                    
                    System.out.println("El resultado es: " + resultado);*/
                    break;
                    
                case 4://fin del programa
                    System.out.println("Fin del programa");
                    break;
                default:
                    System.out.println("ERROR: Ingrese un numero del 1 al 4.");
               
            }
            
        }while (opcion!=4);
        
    }
    
    //menu utilizado para indicar distintas opciones al usuario
     public static void menu()
    {
        System.out.println();
        System.out.println("-------    MENU INTERACTIVO    -------\n");
        System.out.println("| 1. Ingresar operando                 |");
        System.out.println("| 2. Ingresar operador               |");
        System.out.println("| 3. Producir resultado                          |");
        System.out.println("| 4. Salir del programa                 |");
    }
     
    //---------------------------------------------------------------------------------
     
    //metodo utilizado como programacion defensiva al momento de pedir datos al usuario
    public static double obNumero(String message, boolean mostrar)
    {
        Scanner teclado=new Scanner (System.in);
        double num=-1;
        
        System.out.print(message);
        try
        {
            num=teclado.nextDouble();
        }
        catch(InputMismatchException exception)
        {
            if (mostrar)
                System.out.println("\nError: este dato es invalido.\n");
        }
        finally
        {
            teclado.nextLine(); //atrapar el enter
        }
        return num;
    }
}
